
// const FILE__video_list__ = "__vods.json";
// const FILE_vod_play_url__ = "__vod_play_url.json";

// // init
// let __tuijian__ = "";
// const __HomeClasses = [];

// //category
// const __countEveryPage = 15;
// const VODS = {};
// const GROUPS = {};

// const request_timeout = 10000;

// let globalServer = "";
// let globalServer_withoutPort = "";
// let global_bili_server = null;
// const default_bili_server = "http://tv1.server.lan:9966";
// const bili_server_base = "/api/onlinevod"

// const FROM_BILIBILI = "from_bilibili";
// const FROM_PUSH = "from_pushme";

// ////


// String.prototype.rstrip = function (chars) {
//   const regex = new RegExp(chars + "+$");
//   return this.replace(regex, "");
// };

// String.prototype.lstrip = function (char) {
//   const regex = new RegExp("^" + char + "+");
//   return this.replace(regex, "");
// };

// let http = function (url, options = {}) {
//   for (let i = 0; i < 2; ++i) {
//     options.timeout = request_timeout;
//     try {
//       let res = req(url, options);
//       res.json = () => (res && res.content ? JSON.parse(res.content) : null);
//       res.text = () => (res && res.content ? res.content : "");
//       return res;
//     } catch (e) {

//     }
//   }
//   return {
//     json() {
//       return null;
//     },
//     text() {
//       return "";
//     },
//   };
// };

// http.get = function (url, options = {}) {
//   return http(
//     url,
//     Object.assign(options, {
//       method: "GET",
//     })
//   );
// };


// /////
// function debug(s) {
//   console.log("__assets__box1_spider__.js: " + s);
// }
// /////////

// function get_bili_apiurl(id) {
//   let host = global_bili_server ? global_bili_server : default_bili_server;
//   debug("===============> " + host);
//   return host + bili_server_base + "/" + id
// }

// function isHttpUrl(url) {
//   return url.startsWith("http://") || url.startsWith("https://");
// }

// function get_vod_list(url) {
//   if (isHttpUrl(url)) {
//     try {
//       return http.get(url + "/" + FILE__video_list__).json();
//     } catch (e) {

//     }
//   }
//   return null;
// }

// let localURL = ""; // ?
// // http :  只支持网络...
// function getAndSetGlobalServer(url) {
//   localURL = "";
//   if (url.startsWith("http://127.0.0.1") || url.startsWith("https://127.0.0.1")) {
//     if (url.startsWith("http://127.0.0.1:9998/file/") || url.startsWith("https://127.0.0.1:9998/file/")) {
//       let n = url.lastIndexOf("/");
//       if (n > 20) {
//         localURL = url.slice(0, n)
//       }
//     }
//     return "";
//   }

//   const regex = new RegExp("^https?://[^/]*");
//   let url_s = url.toLowerCase().match(regex);
//   if (url_s.length > 0 && url_s[0].length > 4) {
//     globalServer = url_s[0]
//     globalServer_withoutPort = globalServer.split(":").slice(0, 2).join(":");
//     debug(globalServer);
//     debug(globalServer_withoutPort);
//     if (global_bili_server) {
//       //
//     } else {
//       if (globalServer_withoutPort.startsWith("http://") || globalServer_withoutPort.startsWith("https://")) {
//         global_bili_server = globalServer_withoutPort + ":9966";
//       }
//     }

//     return globalServer;
//   }
//   return "";
// }

// ////

// //String key, boolean quick
// function search(wd, quick) {
//   //不支持搜索, wd关键词
//   // let query = wd;
//   return JSON.stringify({
//     list: [],
//   });
// }




// function _bili_(id, isJson) {
//   try {
//     let url = get_bili_apiurl(id);
//     debug(url);
//     let u = http.get(url);
//     if (isJson) {
//       u = u.json();
//     } else {
//       u = u.text();
//     }
//     //debug(u);
//     return u;
//   } catch (e) {

//   }
//   if (isJson) {
//     return null;
//   }
//   return "";
// }

// function _play_bili_(id) {
//   let u = _bili_(id);
//   return u;
// }

// //String flag, String id, List<String> vipFlags
// //   flag : vod 中的from , 设成 groups的key
// //   id  :  vod 中的url 在category中已经转换成 完整地址.
// function play(flag, id, flags) {
//   if (flag == FROM_BILIBILI || id.startsWith(FROM_BILIBILI)) {
//     return _play_bili_(id);
//   }

//   let url = "";

//   debug("play : " + id);

//   if (isHttpUrl(id) || id.startsWith("clan://")) {
//     //不要把 文件系统 的路径 encode了..  , 会导致 中文?等一些 路径无法播放..
//     url = encodeURI(id);
//   } else if (id.startsWith("file://")) {
//     url = id.replace(/^file:\/\//, "");
//     //url=id;
//   } else {
//     return;
//   }

//   let video = {
//     parse: 0,
//     playUrl: "",
//     url: url,
//     //subt:encodeURI(subt_url) //字幕
//   };

//   return JSON.stringify(video);
// }

// function _detail_bili_(aid) {
//   return _bili_(aid);
// }


// function getFromPrefixAndObject(s) {
//   let pre;
//   let obj;
//   let raw = false;
//   if (s.startsWith("from_")) {
//     let n = s.indexOf("/");
//     pre = s.slice(0, n)
//     obj = s.slice(n + 1);
//   } else {
//     pre = "";
//     obj = s;
//   }
//   try {
//     obj = JSON.parse(obj);
//   } catch (error) {
//     raw = true;
//   }
//   debug(s);
//   debug(pre);
//   return {
//     "fromWhere": pre,
//     "raw": raw,
//     "obj": obj
//   }
// }

// const BVID_TO_AID = {};

// function get_aid_by_bvid(bvid) {
//   let aid = BVID_TO_AID[bvid];
//   if (aid) {
//     return aid;
//   }

//   let url = default_bili_server;
//   if (global_bili_server) {
//     url = global_bili_server;
//   }
//   url = get_bili_apiurl(bvid + "/get_bili_aid")

//   let u = http.get(url);
//   return u.text();
// }

// function pushed_bili(vod_id) {
//   debug("try to play bilibili:" + vod_id);
//   let an_id = vod_id.substring(FROM_BILIBILI.length + 1);
//   let tmp = an_id.toLowerCase();
//   let aid = vod_id;
//   if (tmp.startsWith("bv")) {
//     aid = get_aid_by_bvid(vod_id);
//     vod_id = FROM_BILIBILI + "/" + aid;
//   } else if (tmp.startsWith("av")) {
//     aid = an_id.substring(2);
//     vod_id = FROM_BILIBILI + "/" + aid;
//   }
//   debug("aid=" + aid);

//   let vod = {};
//   //vod.vod_id=vod_id;
//   vod.vod_name = "BI:" + aid;
//   vod.vod_play_from = FROM_BILIBILI;
//   vod.vod_play_url = _bili_(vod_id);
//   return JSON.stringify({
//     list: [vod],
//   });
// }

// function from_pushed(vod_id) {
//   if (vod_id.startsWith(FROM_BILIBILI + "/")) {
//     return pushed_bili(vod_id);
//   }

//   return "";
// }

// //detail(vod_id)
// function detail(vod_id) {
//   debug("detail : " + vod_id);
//   if (vod_id.startsWith(FROM_PUSH + "/")) {
//     return from_pushed(vod_id.substring(FROM_PUSH.length + 1));
//   }

//   let vod;
//   let { fromWhere, raw, obj } = getFromPrefixAndObject(vod_id);

//   if (raw) {
//     return;
//   }

//   vod = VODS[vod_id];

//   let root = obj.root;
//   let vid = obj.vid;
//   let groupid = obj.startPage;

//   if (!vod) {
//     try {
//       let cate = category(groupid, 1);
//       vod = VODS[vod_id];
//     } catch (e) {

//     }
//     if (!vod) {
//       debug("not found vod II")
//       return;
//     }
//   }

//   debug(" found vod")
//   if (fromWhere == FROM_BILIBILI) {
//     if (!(vod.vod_play_url && vod.vod_play_url.length > 1)) {
//       vod.vod_play_url = _detail_bili_(vid);
//     }
//   } else {
//     if (!vod.vod_play_url) {
//       let urls = http.get(root + "/" + vid + "/" + FILE_vod_play_url__).json();
//       if (urls && urls.vod_play_url) {
//         urls = urls.vod_play_url;
//       } else if (root != globalServer) {
//         //globalServer
//         urls = http.get(globalServer + "/" + vid + "/" + FILE_vod_play_url__).json();
//         if (urls && urls.vod_play_url) {
//           urls = urls.vod_play_url;
//         }
//       }

//       debug(urls);
//       if (urls) {
//         urls = urls.split("#");
//         urls = urls.map((x) => {
//           let [x0, x2] = x.split("$");
//           return x0 + "$" + root + "/" + x2;
//         })
//         urls = urls.join("#");
//         vod.vod_play_url = urls;
//       }
//       // debug(vod.vod_play_url);
//     }
//   }

//   if (vod) {
//     vod = [vod];
//   }

//   return JSON.stringify({
//     list: vod,
//   });
// }

// function baseName(u) {
//   let x = u.match(/[^\/]+\/?$/);
//   if (x.length > 0) {
//     return x[0];
//   }
//   return u;
// }

// function absUrl(root, u) {
//   if (u.startsWith("file://") || u.startsWith("http://") || u.startsWith("https://")) {
//     return u;
//   }
//   u = u.replace(/^\.?\/?/, "");
//   return root.rstrip("/") + "/" + u;
// }

// function get_vods_by_id(tid) {
//   let root, startPage;
//   try {
//     let jo = JSON.parse(tid);
//     root = jo.root;
//     startPage = jo.startPage;
//   } catch (e) {
//     return null;
//   }

//   let list = GROUPS[tid];
//   if (!list) {
//     let url = root + "/" + startPage;
//     list = get_vod_list(url);
//     if (list && list.length > 0) {
//       list.forEach((v) => {
//         // name, pic  ; 加上 一些 其他的属性!
//         if (v.vod_tag != "cover" && v.vod_tag != "folder") {
//           v.vod_tag = "file";
//           if (v.vod_id.startsWith(FROM_BILIBILI)) {
//             // vod_id=from_bilibili/aid/cid
//             v.vod_play_from = FROM_BILIBILI;
//             v.vod_pic = v.vod_pic ? absUrl(url, v.vod_pic) : "";
//             v.vod_id = FROM_BILIBILI + "/" + JSON.stringify({
//               "root": root,
//               "startPage": tid,
//               "vid": v.vod_id,
//             });
//           } else {
//             v.vod_pic = v.vod_pic ? absUrl(root, v.vod_id + "/" + v.vod_pic) : "";
//             v.vod_id = JSON.stringify({
//               "root": root,
//               "startPage": tid,
//               "vid": v.vod_id,
//             });
//           }

//           VODS[v.vod_id] = v; // save
//         } else {
//           v.vod_tag = "folder";
//           v.vod_pic = v.vod_pic ? absUrl(root, v.vod_id + "/" + v.vod_pic) : "";
//           v.vod_id = JSON.stringify({
//             "root": root,
//             "startPage": v.vod_id.rstrip("/").lstrip("/"),
//           });
//         }

//       });
//       GROUPS[tid] = list;
//     } else {
//       return null;
//     }
//   }
//   return list;
// }

// //String tid, String pg, boolean filter, HashMap<String, String> extend
// //pg==page
// //  查询靠这个的? 过滤
// function category(tid, pg, filter, extend) {

//   debug("category : " + tid);

//   // if(!isHttpUrl(tid)){
//   //   return;
//   // }
//   let list;
//   for (let i = 0; i < 2; ++i) {
//     list = get_vods_by_id(tid);
//     if (list && list.length > 0) {
//       break;
//     } else if (i > 0) {
//       return null;
//     }
//   }

//   //TODO: filter == true ==> 排序, 参数是 home 的filter传进来的
//   let pagecount_tmp = list.length / __countEveryPage;
//   let pagecount = parseInt(pagecount_tmp);
//   if (pagecount_tmp - pagecount > 0) {
//     pagecount++;
//   }

//   let start = __countEveryPage * (pg - 1);
//   let end = __countEveryPage * pg;

//   let page_list = list.slice(start, end);

//   return JSON.stringify({
//     page: pg,
//     pagecount: pagecount,
//     list: page_list,
//   });
// }

// // 首页 最近更新数据(推荐视频)
// function homeVod(params) {
//   let homeVods = [];
//   if (__tuijian__) {
//     homeVods = get_vods_by_id(__tuijian__);
//   }

//   return JSON.stringify({
//     list: homeVods,
//   });
// }

// function home(filter) {
//   return JSON.stringify({
//     class: __HomeClasses,
//   });
// }

// // 只支持 String ext // 此处 ext 为 groups.json 的路径.
// function init(ext) {
//   debug(ext);
//   debug("box1_api.js");
//   if (typeof ext == "string" && (ext.startsWith("http://") || ext.startsWith("https://"))) {
//     let ext_data_urls = ext.split(";");
//     let root = "";
//     for (let i = 0; i < ext_data_urls.length; ++i) {
//       root = getAndSetGlobalServer(ext_data_urls[i]);//root url
//       if (root) {
//         break;
//       }
//     }

//     for (let i = 0; i < ext_data_urls.length; ++i) {
//       let url = ext_data_urls[i];
//       let groupsMetaData = null;
//       if (!isHttpUrl(url)) {
//         url = absUrl(root, url);
//       }
//       try {
//         groupsMetaData = http.get(url).json();
//       } catch (e) {
//         groupsMetaData = null;
//       }

//       if (!groupsMetaData || !(groupsMetaData instanceof Array)) {
//         continue;
//       }

//       groupsMetaData.forEach((d) => {
//         if (!d || !d.startPage) {
//           return;
//         };

//         d.startPage = JSON.stringify({
//           "root": root,
//           "startPage": d.startPage.rstrip("/").lstrip("/")
//         });

//         if (i == 0 && d.tuijian == "yes") {
//           __tuijian__ = d.startPage;
//         } else {
//           __HomeClasses.push({
//             type_id: d.startPage,
//             type_name: d.name ? "" + d.name : "??",
//             type_flag: 2, // 1=browser mode , 2=海报(默认)
//           });
//         }
//       });
//     }

//   }
// }

// export default {
//   init: init,
//   home: home,
//   homeVod: homeVod,
//   category: category,
//   detail: detail,
//   play: play,
//   search: search,
// };


